package ticket.impresion;

import Negocios.ControlSales;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author lightemp
 */
public final class ControlTicket {

    private int idVenta = 0;
    private Connection conexionSQL = null;
    private String tipoReporte = null;//Nombre global del reporte que se va a cargar

    public ControlTicket(String reportToCharge, int idVenta) {
        this.idVenta=idVenta;
        Conexion();
        tipoReporte = reportToCharge;
        ejecutarReporte();
    }

    private void Conexion() {
        try {
            Class.forName("com.mysql.jdbc.Driver"); //se carga el driver
            conexionSQL = DriverManager.getConnection("jdbc:mysql://localhost:3333/salestedispatcher?zeroDateTimeBehavior=convertToNull", "root", "rdx06082013elmdrg");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void cerrar() {
        try {
            conexionSQL.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public String eligeRutaReporte(String reporte) {
        switch (reporte) {
            case "Ventas":
                reporte = System.getProperty("user.dir") + "/reporteTicket.jrxml";
                break;
        }
        return reporte;
    }

    private boolean isRegistros(String nombreTabla) {
        List listEntity = null;
        switch (nombreTabla) {
            case "Ventas":
                ControlSales cv = new ControlSales();
                listEntity = cv.selectAll();
                break;
        }
        if (listEntity.isEmpty()) {
            return false;
        }
        return true;
    }

    private void ejecutarReporte() {
        if (isRegistros(tipoReporte)) {
            try {

                String archivo = eligeRutaReporte(tipoReporte);
                if (archivo == null) {
                    JOptionPane.showMessageDialog(null, "Error al cargar reporte",
                            "Generar Reporte", JOptionPane.ERROR_MESSAGE);
                }
                JasperReport masterReport = null;
                try {
                    masterReport = JasperCompileManager.compileReport(archivo);
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e,
                            "Error al cargar reporte", JOptionPane.ERROR_MESSAGE);
                    System.out.println(e);
                }
                Map parametros = new HashMap();
                parametros.put("idVenta", idVenta);
                JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, parametros, conexionSQL);
                //JasperViewer.viewReport(jasperPrint, false);
                JasperPrintManager.printReport(jasperPrint, false);
                cerrar();
            } catch (JRException e) {
                JOptionPane.showMessageDialog(null, "Error al compilar reporte",
                        "Generar Reporte", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(null, "No existen registros para mostrar en reporte",
                    "Generar Reporte", JOptionPane.ERROR_MESSAGE);
        }
    }
}
